package io.github.annyylxyms.gyn.gateway.demo;

import org.springframework.stereotype.Component;

import static org.springframework.web.reactive.function.server.RouterFunctions.route;

/**
 * gateway router
 * 网关集合点
 */
@Component
public class GatewayRouter {
//    @Autowired
//    HelloHandler helloHandler;
//    @Autowired
//    GatewayHandler gatewayHandler;
//
//    /**
//     * 实现用编程方式动态创建接入路径和返回响应的逻辑，类似handler mapping干的活
//     * @return
//     */
//    @Bean
//    public RouterFunction<?> helloRouterFunction(){
//        //route导入就是RouterFunction
//        //一个坑：body里的内容要封装一下，用Mono.just，Mono 是响应式编程中的一个发布者（Publisher），它可以发出零个或一个元素，然后完成。或者可以用bodyValue
//        //route 方法接受两个参数，第一个参数是请求路径（断言是否是该路径），第二个参数是处理请求的函数
//        /*return route(GET("/hello"),
//                request -> ServerResponse.ok().body(Mono.just("hello,gateway."), String.class));*/
//        //在使用方法引用 helloHandler::handle 时，确实不需要显式地传递 handle 方法的参数。这是因为方法引用的参数是由上下文提供的，而不是在方法引用本身中指定的。让我们详细解释一下这一点。
//        return route(GET("/hello"),helloHandler::handle);
//    }
//
//    @Bean
//    public RouterFunction<?> gwRouterFunction(){
//        //可以用and\or\not组合断言:这里就是匹配GET请求的/gw 或者POST请求的 /gw/**（**是全字符匹配，比如：http://localhost:8888/gw/cn.gyn.gynrpc.demo.api.UserService）
//        return route(GET("/gw").or(POST("/gw/**")),gatewayHandler::handle);
//    }
}
